package com.meiyou.mapper;

import com.github.pagehelper.Page;
import com.meiyou.annotation.AutoFill;
import com.meiyou.entity.Comment;
import com.meiyou.enumeration.OperationType;
import com.meiyou.vo.ChildCommentVo;
import com.meiyou.vo.CommentVo;
import com.meiyou.vo.SimpleChildCommentVo;
import com.meiyou.vo.UserCommentVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.poi.ss.formula.functions.T;

import java.util.List;

/**
 * @BelongsProject: meiyou
 * @BelongsPackage: com.meiyou.mapper
 * @Author: 尹晓安
 * @Date: 2023/12/3 20:56
 * @Description: todo
 */
@Mapper
public interface CommentMapper {

    /**
     * 添加数据
     *
     * @param comment
     */
    @AutoFill(OperationType.INSERT)
    void add(Comment comment);

    /**
     * 分页获取评论
     *
     * @param articleId
     * @return
     */
    Page<CommentVo> getCommentPage(Long articleId);

    /**
     * 分页获取子评论
     *
     * @param commentId 父级评论id
     * @return
     */
    Page<ChildCommentVo> getChildCommentPage(Long commentId);

    /**
     * 查询评论的评论数
     *
     * @param id 评论id
     * @return
     */
    Integer selectCommentNum(Long id, Long articleId);

    /**
     * 查询子评论简略信息
     *
     * @param id 评论id
     */
    List<SimpleChildCommentVo> selectSimpleChildComment(Long id);

    /**
     * 查询是否存在
     *
     * @param id
     * @return
     */
    Integer select(Long id);

    /**
     * 删除评论
     *
     * @param id
     */
    void remove(Long id);

    /**
     * 点赞评论
     *
     * @param id  评论id
     * @param num 点赞数
     * @return
     */
    void starComment(Long id, Integer num);

    /**
     * 查询点赞数
     *
     * @param id
     * @return
     */
    Integer selectStarNum(Long id);

    /**
     * 获取改文章的评论总数
     *
     * @param articleId 文章id
     */
    Integer getCommentNumByArticleId(Long articleId);

    /**
     * 分页获取用户评论列表
     *
     * @param userId 用戶id
     */
    Page<UserCommentVo> getUserCommentPage(Long userId);

    /**
     * 根据文章id删除评论
     * @param articleId 文章id
     */
    void removeByArticleId(Long articleId);
}
